6
תגובות

זה מסורבל?

פתח soogo ,
כתבתי דף login ולפי דעתי זה יצא קצת מסורבל שכל פעם אני משווה את המשתנה לעצמו
יש לכם רעיון לייעול?

<?php
    if (isset($_POST['Submit']))
    {
        $UserName =& $_POST['UserName'];
        $Password =& $_POST['Password'];

        $UserName = htmlspecialchars($UserName, ENT_QUOTES, 'UTF-8');
        $Password = htmlspecialchars($Password, ENT_QUOTES, 'UTF-8');
       
        $UserName = mysqli_real_escape_string($UserName);
        $Password = mysqli_real_escape_string($Password);

        $Password = md5($Password);

        // שאילתת התחברות לאתר
    }
?>

6 תשובות

avatar ענה intval ב 13 לדצמבר 2013 #

זה בסדר גמור, רק שלוש הערות:

א. אתה מכניס למסד מחרוזות כבר אחרי htmlSpecialChars. זה לא רעיון טוב. htmlSpecialChars צריך להתבצע בזמן התצוגה ולא בזמן השמירה. תחשוב שהיום אתה מציג את שם המשתמש בעמוד ווב ומחר אתה רוצה להציג אותו בתוך הודעת מייל או בדו"ח אקסל. שם אתה לא רוצה שיופיעו גרשיים מיותרות, בגלל ש-htmlSpecialChars מתאים לעמודי ווב ולא לקבצי אקסל.

ב. אתה עושה לסיסמה md5, הפלט של md5 אף פעם לא יכלול גרשיים או משהו בסגנון לכן שני הפעולות (hsc, escape) האלה על סיסמה מיותרות.

ג. md5, באיחוד ככה לא מספק מבחינת אבטחה.

avatar ענה soogo ב 13 לדצמבר 2013 #

זה אומר שדף כזה הוא מושלם?
את סעיף ג בכלל לא הבנתי

<?php
    if (isset($_POST['Submit']))
    {
        $UserName =& $_POST['UserName'];
        $Password =& $_POST['Password'];

        $UserName = mysqli_real_escape_string($UserName);
     
        $Password = md5($Password);

        // שאילתת התחברות לאתר
    }
?>

avatar ענה intval ב 13 לדצמבר 2013 #

במקרה הזה אין סיבה לעשות את שני ההצבות הראשונות.

if (isset($_POST['Submit'])) {

  $UserName = mysqli_real_escape_string($_POST['UserName']);
  $Password = md5($_POST['Password']);

  // שאילתת התחברות לאתר
}


מעבר לזה, אני הייתי מוסיף בדיקה שהמערך post בכלל מכיל את שני המפתחות האלה ושהם לא מחרוזות ריקות

if(!isset($_POST['UserName'], $_POST['Password']))
{
  ..
}
else if(!is_string($_POST['UserName']) || '' === trim($_POST['UserName']))
{
  ..
}
else if(!is_string($_POST['Password']) || empty($_POST['Password']))
{
  ..
}
else
{
  $UserName = mysqli_real_escape_string($_POST['UserName']);
  $Password = md5($_POST['UserName']);
}

avatar ענה OrelBeY ב 14 לדצמבר 2013 #

@sogo בסעיף ג' אלכס אמר ש-md5 זה לא מספיק כדי להצפין סיסמה. זה לא מוגן בכלל. והוא הפנה אותך למאמר שמסביר למה זה לא מספיק ומראה דרך חלופית.

avatar ענה net5basal ב 14 לדצמבר 2013 #

עצה שלי ככה בשביל ואלידיציה בלי שום בעיות והכי טובה מבחינתי
אם אתה רוצה למשל לקבל רק string ולא משהו אחר תעשה ככה:




preg_replace('#[^a-zA-Z]#', "", $_POST['UserName']);

avatar ענה soogo ב 15 לדצמבר 2013 #

אבל זה לא טיפשי לגרום למשתמש לחכות סתם?

ולגבי הואלידציה לא יותר פשוט להשתמש בפילטרים?